﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Linq;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevEx.Thanh.Class;
using DevEx.Thanh.UserControl;
using DevEx.QuocSy.UserControl;
using DevExpress.XtraBars;
using DevExpress.XtraBars.Helpers;
using DevExpress.XtraBars.Ribbon;
using DevExpress.XtraEditors;
using DevExpress.XtraTabbedMdi;
using Microsoft.Office.Interop;
using Microsoft.Office.Interop.Excel;
using Microsoft.VisualBasic;
using System.Linq;

namespace DevEx
{
    public partial class frmMain : DevExpress.XtraBars.Ribbon.RibbonForm
    {
        public frmMain()
        {
            InitializeComponent();
        }

        #region KHÓA MENU VÀ KIỂM TRA HỢP LỆ ĐĂNG NHẬP
        private void EnableMenus(bool val)
        {
            //duyệt qua từng cái page và cái item
            foreach (RibbonPage p in ribbon.Pages)
            {
                foreach (RibbonPageGroup pg in p.Groups)
                {
                    foreach (BarButtonItem button in pg.Ribbon.Items.OfType<DevExpress.XtraBars.BarButtonItem>())
                        {
                            button.Enabled = val;
                        }
                        foreach (BarSubItem button in pg.Ribbon.Items.OfType<DevExpress.XtraBars.BarSubItem>())
                        {
                            button.Enabled = val;
                        }
                }
            } 
            //thiết lập lại nút đăng nhập đăng xuất
            btDangNhap.Enabled = !val;
            btDangXuat.Enabled = val;
            btDoiMatKhau.Enabled = val;
            rbSkin.Enabled = true;
        }
        
        private void EnableMenuTheoQuyen()
        {
            int ID_Role = GlobalVar.CurrentUser.ID_Role.Value;
            CRoleMenuController ctrlRoleMenu = new CRoleMenuController();
            foreach (RibbonPage p in ribbon.Pages)
            {
                foreach (RibbonPageGroup pg in p.Groups)
                {
                    foreach (BarButtonItem button in pg.Ribbon.Items.OfType<DevExpress.XtraBars.BarButtonItem>())
                    {
                        if (ctrlRoleMenu.CheckMenuInRoleByName(ID_Role, button.Caption))
                            button.Enabled = true;
                    }
                }
            }
            //thiết lập lại nút đăng nhập đăng xuất
            btDangNhap.Enabled = false;
            btDangXuat.Enabled = true;
            btDoiMatKhau.Enabled = true;
        }
        #endregion
        
        private void RibbonForm1_Load(object sender, EventArgs e)
        {
            InitSkinGallery();
            //lấy thông tin cơ sở dữ liệu đang dùng
            this.Text = "Nhà máy A41 - Chương trình quản lý vật tư";
            //splitContainerControl.CollapsePanel = splitContainerControl;// = true;
            splitContainerControl.Panel1.Hide();
            splitContainerControl.Panel1.Height = 0;
            splitContainerControl.Panel1.Visible = false;
            GlobalVar.FormMain = this;
            //splitContainerControl.Panel1
            //khóa menu, hiển thị form login
            //kiểm tra xem có user nào trong bảng chưa
            QLVTDataContext objContext = new QLVTDataContext();
            if (objContext.tblUsers.Count( )>0)
            {
                EnableMenus(false);
                btDangNhap_ItemClick(null, null);
            }
        }

        public void AddTab(DevExpress.XtraTab.XtraTabControl XtraTabCha, String TabName, DevExpress.XtraEditors.XtraUserControl UserControl) 
        {
            TabAdd clsAddTab = new TabAdd();
            int t = 0;
            foreach (DevExpress.XtraTab.XtraTabPage tab in XtraTabCha.TabPages)
            {
                if (tab.Text == TabName)
                {
                    XtraTabCha.SelectedTabPage = tab;
                    t = 1;
                }
            }
            if (t == 1)
            {

            }
            else
            {// Nếu chưa có TAb này thì gọi hàm Addtab xây dựng ở trên để Add Tab con vào
                clsAddTab.AddTab(XtraTabCha, "25.png", TabName, UserControl);
            }
        }

        void InitSkinGallery()
        {
            SkinHelper.InitSkinGallery(rbSkin, true);
        }
               
        private void xtraTabControl1_ControlAdded(object sender, ControlEventArgs e)
        {// Khi add vào thì Focus tới ngay Tab vừa Add
            xtraTabControl1.SelectedTabPageIndex = xtraTabControl1.TabPages.Count - 1;
        }

        public void CloseTab(String TabName)
        {
            foreach (DevExpress.XtraTab.XtraTabPage tab in xtraTabControl1.TabPages)
            {
                if (tab.Text == TabName)
                {
                    xtraTabControl1.SelectedTabPage = tab;
                    tab.Dispose();

                    try
                    {
                        xtraTabControl1.SelectedTabPageIndex = xtraTabControl1.TabPages.Count - 1;
                    }
                    catch { }
                }
            }
        }

        private void xtraTabControl1_CloseButtonClick(object sender, EventArgs e)
        {// dong tab
            DevExpress.XtraTab.XtraTabControl tabControl = sender as DevExpress.XtraTab.XtraTabControl;
            DevExpress.XtraTab.ViewInfo.ClosePageButtonEventArgs arg = e as DevExpress.XtraTab.ViewInfo.ClosePageButtonEventArgs;
            (arg.Page as DevExpress.XtraTab.XtraTabPage).Dispose();
            try
            {
                xtraTabControl1.SelectedTabPageIndex = xtraTabControl1.TabPages.Count - 1;
            }
            catch { }            
        }

        private void btnCCL_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Cấp chất lượng", new ucCCL());
        }

        private void btnKho_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Danh mục Kho", new ucKho());
        }

        private void btnDVT_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Danh mục ĐVT", new ucDVT());
        }

        private void btnTinhChatNhap_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Danh mục Tính chất Nhập", new ucTCNX(true));
        }

        private void btnTinhChatXuat_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Danh mục Tính chất Xuất", new ucTCNX(false));
        }

        private void btnHopDong_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Danh mục Hợp đồng", new ucHopDong());
        }

        private void btnDonVi_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Danh mục Đơn vị", new ucDonVi());
        }

        private void btnVatTu_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Danh mục Vật tư", new ucVatTu());
        }

        private void btnPhieuNhap_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Phiếu Nhập", new ucPhieuNhap());
        }              

        private void btnPhieuXuat_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Phiếu Xuất", new ucPhieuXuat());
        }

        private void btnTonDauKy_ItemClick(object sender, ItemClickEventArgs e)
        {
            //AddTab(xtraTabControl1, "Tồn đầu kỳ", new ucTonDauKy());
        }

        private void btnNguonVatTu_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Nguồn vật tư", new ucNguonVatTu());
        }

        private void btnQuanLyNhapXuat_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Quản lý Nhập Xuất", new ucQuanLyNhapXuat(this));
        }

        private void btnQuanLyLoHang_ItemClick(object sender, ItemClickEventArgs e)
        {
            //CModule_Sy m_Module = new CModule_Sy();
            //m_Module.ChuyenSoLieu();
            AddTab(xtraTabControl1, "Quản lý Lô hàng", new ucQuanLyLoHang());
        }

        private void btKiemTraSoLieu_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Kiểm tra số liệu", new ucKiemTraSoLieu());
        }

        private void btnSanPham_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Danh mục Sản phẩm", new ucSanPham());
        }

        private void barButtonItem27_ItemClick(object sender, ItemClickEventArgs e)
        {AddTab(xtraTabControl1, "Kiểm kê kho", new ucKiemKeTheoKho() );
        }

        private void btQuanLyNguoiDung_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Quản lý người dùng", new ucUser() );
        }

        private void btDangXuat_ItemClick(object sender, ItemClickEventArgs e)
        {
            EnableMenus(false);
            GlobalVar.LoginOK = false;
            GlobalVar.CurrentUser = null;
        }

        private void btDangNhap_ItemClick(object sender, ItemClickEventArgs e)
        {
            frmLogin login = new frmLogin();
            login.ShowDialog();
            if (GlobalVar.LoginOK)
            {
                //EnableMenus(true);
                EnableMenuTheoQuyen();
            }
        }
        public RibbonControl GetRibbon()
        {
            return ribbon;
        }

        private void btPhanQuyen_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Phân quyền sử dụng", new ucRoleMenu( this));
        }

        private void btDoiMatKhau_ItemClick(object sender, ItemClickEventArgs e)
        {
            frmDoiMatKhau frm = new frmDoiMatKhau();
            frm.ShowDialog();
        }

        public void AddTabPhieuNhapXuat(String NX, int ID_DPNX, String SoPhieu)
        {
            CModule_Sy m_module = new CModule_Sy();
            if (NX == "N")
            {
                AddTab(xtraTabControl1, "Phiếu Nhập - " + m_module.GetSoPhieu(ID_DPNX), new ucPhieuNhap(ID_DPNX));
            }

            if (NX == "X")
            {
                AddTab(xtraTabControl1, "Phiếu Xuất -" + m_module.GetSoPhieu(ID_DPNX), new ucPhieuXuat(ID_DPNX));
            }
        }

        public void AddTabPhieuXuat(int ID_PhieuNhap)
        {
            AddTab(xtraTabControl1, "Phiếu Xuất", new ucPhieuXuat(ID_PhieuNhap,0));
        }

        public void AddTabPhieuCKNB(string NX, int ID_DPNX)
        {
            AddTab(xtraTabControl1, "Chuyển kho nội bộ" , new ucChuyenKhoNoiBo(NX, ID_DPNX));            
        }

        public void AddTab(String TabName, DevExpress.XtraEditors.XtraUserControl UserControl)
        {
            TabAdd clsAddTab = new TabAdd();
            int t = 0;
            foreach (DevExpress.XtraTab.XtraTabPage tab in xtraTabControl1.TabPages)
            {
                if (tab.Text == TabName)
                {
                    xtraTabControl1.SelectedTabPage = tab;
                    t = 1;
                }
            }
            if (t == 1)
            {

            }
            else
            {// Nếu chưa có TAb này thì gọi hàm Addtab xây dựng ở trên để Add Tab con vào
                clsAddTab.AddTab(xtraTabControl1, "25.png", TabName, UserControl);
            }
        }
              

        private void btnChuyenKhoNoiBo_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Phiếu chuyển nội bộ", new ucChuyenKhoNoiBo());
        }

        private void barButtonItem25_ItemClick(object sender, ItemClickEventArgs e)
        {
            //bao cao nhap xuat ton theo nguon
            CViewer.InBaoCaoNXThang_TheoNguon();
        }

        private void btSaoLuu_ItemClick(object sender, ItemClickEventArgs e)
        {
            frmBackup frm = new frmBackup();
            frm.ShowDialog();
        }

        private void btThayDoiDuLieu_ItemClick(object sender, ItemClickEventArgs e)
        {
            frmChooseDB frm = new frmChooseDB();
            frm.ShowDialog();
        }

        private void btnQuanLyHopDong_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Quản lý hợp đồng", new ucQuanLyHopDong()); 
        }

        private void btnQuanLySanPham_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Quản lý sản phẩm", new ucQuanLySanPhamTree()); 
            //CModule_Sy m_module = new CModule_Sy();
            //m_module.ChuyenSoLieu();
        }

        private void btnQuanLySoKho_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Quản lý sổ kho", new ucSoKho());
        }

        private void barButtonItem22_ItemClick(object sender, ItemClickEventArgs e)
        {
            //Bao cao hang nhap theo ngay thang, nguon vat tu
            AddTab(xtraTabControl1, "Báo cáo tổng hợp hàng nhập", new ucBaoCaoNhapXuat("N"));
        }

        private void barButtonItem23_ItemClick(object sender, ItemClickEventArgs e)
        {
            //Bao cao hang xuat theo ngay thang, nguon vat tu
            AddTab(xtraTabControl1, "Báo cáo tổng hợp hàng xuất", new ucBaoCaoNhapXuat("X"));
        }

        private void barButtonItem24_ItemClick(object sender, ItemClickEventArgs e)
        {
            AddTab(xtraTabControl1, "Báo cáo hàng tồn", new ucBaoCaoHangTon());
        }

        private void barButtonItem26_ItemClick(object sender, ItemClickEventArgs e)
        {
            CNgayDauKyController ctrChuyen = new CNgayDauKyController();
            //kiểm tra xem có ai chuyển chưa?
            int year = DateTime.Now.Year;
            if (DateTime.Now > new DateTime(year, 12, 15))
            {
                year = year +1;
                if (MessageBox.Show("Bạn chuyển dữ liệu cho năm " + year.ToString() + "?", "Xác nhận", MessageBoxButtons.YesNo) == DialogResult.No)
                    return;
            }
            DateTime ngayDauKy = new DateTime(year, 1, 1);
            tblNGAYDAUKY ngayChuyen = ctrChuyen.SelectRecordByID(ngayDauKy);
            if (ngayChuyen!=null)
            {
                MessageBox.Show("Đã thực hiện chuyển dữ liệu rồi. Người chuyển: " + ngayChuyen.nguoichuyen + ", ngày chuyển: " + ngayChuyen.ngaygiochuyen.Value.ToString("dd/MM/yyyy"), "Thông báo");
                return;
            }
            
            CTonController ctrlTon = new CTonController();
            //kiểm tra xem số liệu có khớp
            //kiem tra so lieu
            ISingleResult<sp_T_KiemTraSoLieu_AllResult> kt = ctrlTon.KiemTraSoLieuAll();
            if (kt.Count() > 0)
            {
                //bao loi
                MessageBox.Show("Số liệu kế hoạch và thực hiện chưa khớp. Không thể chuyển số liệu");
                return;
            }
            //nhắc người dùng backup
            if (MessageBox.Show("Bạn nên backup dữ liệu trước khi chuyển dữ liệu. Nếu đã backup, chọn OK. Nếu chưa, chọn Cancel, sau đó vào Hệ thống - Sao lưu dữ liệu.", "Thông báo", MessageBoxButtons.OKCancel) == DialogResult.OK)
            {
                if (ctrChuyen.ChuyenDuLieuDauNam(year) == DateTime.MinValue)
                {
                    MessageBox.Show("Có lỗi khi chuyển dữ liệu", "Thông báo");
                }
                else
                {
                    MessageBox.Show("Chuyển dữ liệu thành công. Tắt chương trình sau đó khởi động lại để làm việc với dữ liệu mới!", "Thông báo");
                }
                
            }
        }

       
    }
}
